對於分散式資料庫的高可用性,
在前面【Day 3】分散式系統模型、容錯、高可用的後段已經提過衡量的標準、服務不能用等於$$$飛走等,
這篇整理 3 大可達成 HA 的 replication 架構:single-leader / multi-leader / leaderless
以及收集目前常見的 HA 實作(盡量啦,就還沒開始工作),也就是一些備援機制,以有個初步認識。
但還是比較著重於基礎知識,畢竟每個 HA 方案的實作都有大量的細節,
不太可能研究完或是能夠很簡單的分為一類。
使用 leader follower 是為了與前面的分散式系統課程保持一致。
我會避免使用 Master Slave 等用詞,以支持這些正名運動。
何況我們有那麼多可以使用的替代詞!
雖然確實已經用習慣、行之有年,可能會有人說「幹嘛那麼敏感?」
但我希望多花一點心力,轉換成沒有歧視意味的用詞,讓這個世界多一分善意。
況且,會覺得沒關係的人,都只是剛好,過得太幸福而已。
這邊定義 leader 為可被讀寫,
follower 只能提供讀。
leader 決定處理 write request 的順序,follower 跟隨 leader 的決定。
希望減少歧義。
一個 write request 傳給 leader 時:
sync: 只有當 follower 都更新好回報 leader,leader 才跟 client 説這個請求成功
async: leader 不等 follower 回報就跟 client 説這個請求成功
顯而易見,sync 情況下,可以確保每個 follower 們都有最新的資料,但這不現實,
畢竟如果 follower 數量一多,就可能要等很久。
semi-synchronous:讓少數 follower synchronous 就好,如果其他 follower 發現自己不是最新的可以跟他們要。
replication 不一致會碰到的問題前面分散式系統的筆記都有提到,
有興趣建議多看看。
問題在不同 leaders 出現衝突的時候,他們都已經告訴 client 寫入成功,這該怎麼解決?
沒用過的東西真的不太好寫..
主要參考:
常見的高可用MySQL資料庫解決方案
一文了解数据库高可用容灾方案的设计与实现
希望沒理解錯